/*********************************************************************/
/*    SEGUN MAQUINA DE ESTADOS  DONDE 						*/
/*  													*/                               
/* 			ESTADO_A esperando instruccion					*/
/* 			ESTADO_F Validando numero de esclavo				*/
/* 			ESTADO_G recibiendo Bytes a Dibujar				*/
/*  													*/
/*********************************************************************/
int8 Caracter=0;
int8 Estado_Actual=ESTADO_A;										//Variable que lleva el estado actual del automata
int8 Estado_Siguiente=ESTADO_A;										//Variable en que se almacena el estado siguiente del automata
int8 Numero_Bytes=0;												//Contador de Bytes Leidos
int8 Buffer_Caracter[5];

#INT_RDA
void automata(void){
	int i=0;
	Caracter=getc();
		switch(Estado_Actual){
			case ESTADO_A:	
				switch(Caracter){
					case '$': //Entro a modo ASCII
						Estado_Siguiente=ESTADO_B;
					break;
					case 'I': 
						Estado_Siguiente=ESTADO_F;
					break;
					case 'D' :
						Estado_Siguiente=ESTADO_J;
					break;
					default: Estado_Siguiente=ESTADO_A;
					break;
				}
			break;
		

		 	case ESTADO_B: 	
				Buffer_Caracter[0]=Caracter;
				Estado_Siguiente=ESTADO_C;
			break;


			case ESTADO_C:
	    		switch(Caracter){
					case NUMERO_ID:
						ascii2Temporal1(Buffer_Caracter[0]);
					break;
				}
				Estado_Siguiente=ESTADO_A;
			break;


			case ESTADO_D:
	    		switch(Caracter){
					default: delay_ms(2);
					break;
				}
			break;
			case ESTADO_F:
				Buffer_Caracter[Numero_Bytes]=Caracter;			//Pone en el arreglo temporal un byte a mostrar
				Numero_Bytes++;								//Incrementa el contador de Bytes leidos
				Estado_Siguiente=ESTADO_F;
				if(Numero_Bytes==5){							//Verifica si ya ha leido los 5 Bytes
					Estado_Siguiente=ESTADO_G;					//Si es asi vuelve al estado A
					Numero_Bytes=0;								//y ademas reinicia en 0 el contador de Bytes
				}
			break;
			case ESTADO_G:
				switch(Caracter){
					case NUMERO_ID:								//Valida Si el mensaje era para este esclavo
						for(i=0;i<5;i++){
							Temporal2[i]=Buffer_Caracter[i];	//Si es asi copia lo que hay en el buffer a temporal2
						}
					break;
				}
				Estado_Siguiente=ESTADO_A;						//Si finalizado esto el vueve al ESTADO A
			break;
			case ESTADO_J:
				switch(Caracter){
					case 'I':								//
						desplegar_grafico();							//despliega grafico
						Estado_Siguiente=ESTADO_A;						//Si ha finallizado vuelve al estado A
					break;
					case 'C':								//
						desplegar_ascii();
						Estado_Siguiente=ESTADO_A;	
					break;
				}
			break;
			case ESTADO_K:
				desplegar_ascii();
				Estado_Siguiente=ESTADO_A;						//Si ha finallizado vuelve al estado A
			break;
		}//cierra switch
		Estado_Actual=Estado_Siguiente;
	//} 
}//cierra main
